package org.jiuling.basics.util;

import org.jiuling.basics.enums.CommonCharEnum;

/**
 * 字符串扩展
 * @author 紫灵
 * @date 2022/9/23年09月23日 13时13分47秒
 */
public class StringUtil {

    /** 私有构造方法，禁止创建对象 */
    private StringUtil() {
    }

    /**
     * 通过下标组装数据
     * @param strArray 数据数组
     * @param subscriptArray 下标数组
     * @return 数据
     */
    public static String assemblyStringBySubscript(String[] strArray,int... subscriptArray){
        StringBuilder stringBuilder = new StringBuilder();
        for (int subscript : subscriptArray) {
            stringBuilder.append(strArray[subscript]);
        }
        return stringBuilder.toString();
    }

    /**
     * 获取目标出现次数
     * 该方法使用indexOf方法获取下标，不适用正则匹配，部分字符无法通过正则匹配，如：{}
     * @param str 字符串
     * @param target 目标
     * @param ignoreEscapeCharacter 忽略转义字符
     * @return 出现次数
     */
    public static int getTargetOccurrenceNumber(String str,String target,boolean ignoreEscapeCharacter){

        // 移除目标子字符中的转义字符
        if(ignoreEscapeCharacter){
            target = target.replace('\\', ' ').replace(" ", "");
        }
        // 定义出现次数
        int count = 0;
        int index = 0;
        while ((index = str.indexOf(target,index)) != -1){
            // 盘点是否忽略转义字符
            if(ignoreEscapeCharacter){
                count++;
                index += target.length();
                continue;
            }
            // 判断是否为第一个字符，如果不是则进行验证
            if(index != 0){
                // 获取字符的上一个字符是否为转义字符，如果是则跳过
                if(str.charAt(index-1) == CommonCharEnum.BACKSLASH.getCh()){
                    index += target.length();
                    continue;
                }
            }
            count++;
            index += target.length();
        }
        return count;
    }

}
